/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;


import bll.blogin;
import java.sql.Connection;
import java.sql.ResultSet;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import dto.dlogin;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author nvc11190
 */
public class SQLSEVERConnect {
    String DataBase = "";
    String Host = "";
    String Password = "";
    String Port = "";
    String UserName = null;
    Connection connect = null;
    ResultSet result = null;
    Statement statement = null;
    
    //Hàm khởi tạo và truyền thông tin của Database Sever.
    
    public SQLSEVERConnect()
    {
        blogin bl=new blogin();
        dlogin dl =bl.GetTaiKhoan();
        this.DataBase = dl.getData();
        this.Host = dl.getHost();
        this.Password = dl.getPass();
        this.Port = dl.getPort();
        this.UserName = dl.getUsename();
        
    }
    //Hàm kiểm tra Driver connect SQL Sever

    SQLSEVERConnect(String host, String user, String pass, String db) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
    protected void driverTest() throws Exception{
        try {
            //Kiểm tra Class Name
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            
        }
        catch(java.lang.ClassNotFoundException e){
            throw new Exception("Sql sever JDBC Driver not found!");
        }
    }
    
    //Hàm lấy connection
    
    protected Connection getConnect() throws Exception {
        //Nếu connection bằng null thì khởi tạo mới
        if(this.connect==null){
            //Kiểm tra Driver
           driverTest();
            
            try {
                //Tạo connection qua url
                SQLServerDataSource ds = new SQLServerDataSource();
                ds.setUser(this.UserName);
                ds.setPassword(this.Password);
                ds.setServerName(this.Host);
                ds.setPortNumber(Integer.parseInt(this.Port));
                
                ds.setDatabaseName(this.DataBase);
                this.connect = ds.getConnection();
                
            }
            catch (java.sql.SQLException e) {
                throw new Exception("Không thể kết nối đến Database!");
            }
        }
        return this.connect;
    }
    
    // Hàm lấy Statement
    
    protected Statement getStatement() throws Exception {
        // Kiểm tra statement nếu = null hoặc đã đóng.
        if (this.statement == null ? true : this.statement.isClosed()) {
            // Khởi tạo một statement mới.
            this.statement = (Statement) this.getConnect().createStatement();
        }
        return this.statement;
    }

    //Hàm thực thi câu lệnh truy vấn select
    
    public ResultSet excuteQuery(String Query) throws Exception{
        try{
            //Thực thi câu lệnh
            this.result = getStatement().executeQuery(Query);
            
        }
        catch (Exception e) {
            throw new Exception("Error: " + e.getMessage() + " - " + Query);
            
        }
        return this.result;
    }
    
    //Hàm thực thi câu lệnh truy vấn update, delete, insert
    
    public int executeUpdate (String Query) throws Exception {
        //Khai báo biến int lưu trữ kết quả
        int res = Integer.MIN_VALUE;
        try{
            //thực thi câu lệnh
            res = getStatement().executeUpdate(Query);
           }
        catch (Exception e) {
          throw new Exception("Erro: " + e.getMessage() + " - " + Query);
        } finally {
            this.Close();
            
        }
        return res;
    }
    
    //Hàm Close
    
    public void Close() throws SQLException {
        //Đóng result
        if (this.result !=null) {
            if (!this.result.isClosed()) {
                this.result.close();
            }
            this.result = null;
        }
        if (this.statement !=null){
            if (!this.statement.isClosed()){
                this.statement.close();
            }
            this.statement = null;
        }
        if (this.connect !=null) {
            if (!this.connect.isClosed()){
                this.connect.close();
            }
            this.connect = null;
        }
    }
    
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

